一開始原本是用 php 去備份資料庫,但是發現會有一些問題,於是改成這種方式,直接透過 mysql 去備份,出來的格式也不會有什麼問題。
$ crontab -e
設定每天凌晨00:00 執行
0 0 * * * php /var/www/backup.php
backup.php 腳本記得開頭一定要 「<?php」,即便你有啟用縮寫
<?php
// 設定環境
header('Content-Type: text/html; charset=utf-8');
date_default_timezone_set('Asia/Taipei');
// 設定保存的資料夾位置
$dir = "/var/www/db/";
// 設定檔名
$filename = "dev-" . date("Y-m-d-H-i-s") . ".sql.gz";
// 設定資料庫
$db_host = "localhost";
$db_username = "root";
$db_password = "password";
$db_database = "db";
// 準備 cmd
$cmd = "mysqldump -h {$db_host} -u {$db_username} --password={$db_password} {$db_database} | gzip > {$dir}{$filename}";
// 執行 cmd
exec($cmd);
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"$filename\"");
passthru("cat {$dir}{$filename}");
?>
輸出時會經過 gzip
解壓縮
實驗過原本 150MB 的 sql 壓縮後為 28MB